package data

import (
	"fmt"
	"strconv"
)

type data struct {
	Extra    map[string]interface{} `json:"extra,omitempty"`
	Response map[string]interface{} `json:"response"`
}

// Response http 返回信息
type Response struct {
	Error      error  `json:"-"`      // 原始错误信息
	Status     int    `json:"status"` // 0 正常 1 需要登录 2 没有权限
	StatusText string `json:"statusText,omitempty"`
	Data       data   `json:"data"`
}

// ServiceResponse 返回项
// type ServiceResponse struct {
// 	Error *ServiceError `json:"error,omitempty"`
// 	// ErrorMessage string       `json:"-"`               // 设定的错误返回提示
// 	// ErrorReturn  string       `json:"error,omitempty"` // 要返回的错误信息
// 	Service  string       `json:"service,omitempty"`
// 	Data     interface{}  `json:"data,omitempty"`
// 	DataType reflect.Type `json:"-"`
// }

type ServiceError struct {
	err interface{}
}

func NewServiceError(err interface{}) *ServiceError {
	return &ServiceError{err: err}
}

func (r *ServiceError) GetError() error {
	err, ok := r.err.(error)
	if !ok {
		err = fmt.Errorf("%v", r.err)
	}
	return err
}

func (r *ServiceError) MarshalJSON() ([]byte, error) {
	if r.err == nil {
		return nil, nil // []byte(strconv.Quote("")), nil
	}

	val := strconv.Quote(r.GetError().Error())
	return []byte(val), nil
}
